using System;
using System.Linq.Expressions;

namespace BulkUploadGovernanceFiles.MongoSpecification
{
    public interface ISpecification<T>
    {
        bool IsSatisfiedBy(T candidate);

        Expression<Func<T, bool>> SpecExpression { get; }

        ISpecification<T> And(ISpecification<T> other);

        ISpecification<T> Or(ISpecification<T> other);

        ISpecification<T> Not(ISpecification<T> other);
    }
}